﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;

namespace SisCRA.Config
{
    public static class AppConfig
    {
        #region -Constants-

        private const string DEFAULT_SECTION = "appSettings";
        private const string IS_FIRST_RUN = "IsFirstRun";
        private const string APP_USER = "AppUser";
        private const string APP_USER_EMAIL = "AppUserEmail";
        private const string APP_USER_PASSWORD = "AppUserPassword";
        private const string EDUCATIONAL_SECTOR = "EducationalSector";
        private const string EDUCATIONAL_SECTOR_EMAIL = "EducationalSectorEmail";
        private const string SERVER = "Server";
        private const string PORT = "Port";
        private const string USER = "User";
        private const string PASSWORD = "Password";
        private const string DATABASE = "Database";

        #endregion

        #region -Public Properties-

        /// <summary>
        /// Seção padrão do arquivo de configuração.
        /// </summary>
        public static string DefaultSection
        {
            get { return DEFAULT_SECTION; }
        }

        /// <summary>
        /// Indica se é a primeira vez que a aplicação está sendo executada.
        /// </summary>
        public static string IsFirstRun
        {
            get { return IS_FIRST_RUN; }
        }

        /// <summary>
        /// Nome do usuário registrado na aplicação.
        /// </summary>
        public static string AppUser
        {
            get { return APP_USER; }
        }

        /// <summary>
        /// E-mail do usuário registrado na aplicação.
        /// </summary>
        public static string AppUserEmail
        {
            get { return APP_USER_EMAIL; }
        }

        /// <summary>
        /// Senha do e-mail do usuário registrado na aplicação.
        /// </summary>
        public static string AppUserPassword
        {
            get { return APP_USER_PASSWORD; }
        }

        /// <summary>
        /// Nome do setor pedagógico da instituição.
        /// </summary>
        public static string EducationalSector
        {
            get { return EDUCATIONAL_SECTOR; }
        }

        /// <summary>
        /// E-mail do setor pedagógico da instituição.
        /// </summary>
        public static string EducationalSectorEmail
        {
            get { return EDUCATIONAL_SECTOR_EMAIL; }
        }

        /// <summary>
        /// Endereço do servidor de banco de dados.
        /// </summary>
        public static string Server
        {
            get { return SERVER; }
        }

        /// <summary>
        /// Porta do servidor de banco de dados.
        /// </summary>
        public static string Port
        {
            get { return PORT; }
        }

        /// <summary>
        /// Usuário do servidor de banco de dados.
        /// </summary>
        public static string User
        {
            get { return USER; }
        }

        /// <summary>
        /// Senha do servidor de banco de dados.
        /// </summary>
        public static string Password
        {
            get { return PASSWORD; }
        }

        /// <summary>
        /// Senha do servidor de banco de dados.
        /// </summary>
        public static string Database
        {
            get { return DATABASE; }
        }

        #endregion

        #region -Public Static Methods-

        /// <summary>
        /// Método que lê um valor do arquivo de configuração.
        /// </summary>
        /// <param name="key">Chave</param>
        /// <returns>Valor</returns>
        public static string ReadConfiguration(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }

        /// <summary>
        /// Método que escreve um valor no arquivo de configuração.
        /// </summary>
        /// <param name="key">Chave</param>
        /// <param name="value">Valor</param>
        public static void WriteConfiguration(string key, string value)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            config.AppSettings.Settings[key].Value = value;

            config.Save(ConfigurationSaveMode.Modified);

            ConfigurationManager.RefreshSection(DEFAULT_SECTION);
        }

        #endregion
    }
}
